%
%~~
%~~  Descrição BNF
%~~
%
\chapter{Lista de Submáquinas}
\label{02:chp:listadesubmaquinas}

As submáquinas geradas a partir da notação de Wirth mínima (considerando apenas os não terminais auto recursivos centrais essenciais) são "Programa", "Comando", "Expressão aritmética" e "Expressão Lógica". Para efeito de simplicação considera-se "Identificador", "Número" e "Qualquer caractere" como terminais já reconhecidos pelo analisador léxico. 

\section{Notação Wirth}
\label{01:sec:programa}
Segue a descrição Wirth de cada submáquina:

\subsection{Programa}
\label{01:subsec:programa}

\begin{verbatim} 
PROGRAMA={("int"|"float"|"char"|"string") 
IDENTIFICADOR "("[("int"|"float"|"char"|"string") 
IDENTIFICADOR {","("int"|"float"|"char"|"string") 
IDENTIFICADOR}] ")" ";"} "int" "main" "(" ")" "{" 
COMANDO "}" {("int"|"float"|"char"|"string")
IDENTIFICADOR "("[("int"|"float"|"char"|"string") 
IDENTIFICADOR {","("int"|"float"|"char"|"string") 
IDENTIFICADOR}] ")" "{" COMANDO "}"}.
\end{verbatim}

\subsection{Comando}
\label{02:subsec:comando}

\begin{verbatim} 
COMANDO = {("int"|"float"|"char"|"string") 
(IDENTIFICADOR ";" |IDENTIFICADOR"="
(EXPRESSAOARITMETICA|"""{QUALQUERCARACTERE}
"""|"'" QUALQUERCARACTERE "'"|IDENTIFICADOR
 "(" {(EXPRESSAOARITMETICA|"""{QUALQUERCARACTERE}
 """|"'" QUALQUERCARACTERE "'")","} 
 (EXPRESSAOARITMETICA|"""{QUALQUERCARACTERE}
 """|"'" QUALQUERCARACTERE "'")")")";")}
 {"while" "(" EXPRESSAOLOGICA ")" "{" COMANDO "}"
 |"if" "(" EXPRESSAOLOGICA ")" "{" COMANDO "}" 
 ["else" "{" COMANDO "}"]|IDENTIFICADOR"="
 (EXPRESSAOARITMETICA|"""{QUALQUERCARACTERE}
 """|"'" QUALQUERCARACTERE "'"|IDENTIFICADOR "(" 
 {(EXPRESSAOARITMETICA|"""{QUALQUERCARACTERE}
 """|"'" QUALQUERCARACTERE "'")","} 
 (EXPRESSAOARITMETICA|"""{QUALQUERCARACTERE}
 """|"'" QUALQUERCARACTERE "'")")")";"|"read" 
 "(" IDENTIFICADOR {"," IDENTIFICADOR} ")" 
 ";"|"print" "(" (EXPRESSAOARITMETICA|"""
 {QUALQUERCARACTERE}"""|"'" QUALQUERCARACTERE "'") 
 ")" ";"|"return" (IDENTIFICADOR|EXPRESSAOARITMETICA
 |"""{QUALQUERCARACTERE}"""|"'" QUALQUERCARACTERE 
 "'")";"}.
\end{verbatim}

\subsection{Expressão Lógica}
\label{03:subsec:expressaologica}

\begin{verbatim} 
EXPRESSAOLOGICA = ["!"](EXPRESSAOARITMETICA 
(">"|"<"|">="|"<="|"!=") ESPRESSAOARITMETICA
|"("EXPRESSAOLOGICA")") {"||" ["!"]
(EXPRESSAOARITMETICA (">"|"<"|">="|"<="|"!=") 
ESPRESSAOARITMETICA|"("EXPRESSAOLOGICA")")} 
{"&&" ["!"](EXPRESSAOARITMETICA 
(">"|"<"|">="|"<="|"!=") 
ESPRESSAOARITMETICA|"("EXPRESSAOLOGICA")") 
{"||" ["!"](EXPRESSAOARITMETICA 
(">"|"<"|">="|"<="|"!=") ESPRESSAOARITMETICA
|"("EXPRESSAOLOGICA")")}}.
\end{verbatim}

\subsection{Expressão Aritmética}
\label{04:subsec:expressaoaritmetica}

\begin{verbatim} 
EXPRESSAOARITMETICA = (IDENTIFICADOR|NUMERO
|"("EXPRESSAOARITMETICA")") {("*"|"/")
(IDENTIFICADOR|NUMERO|"("EXPRESSAOARITMETICA")")} 
{("+"|"-") (IDENTIFICADOR|NUMERO|"("
EXPRESSAOARITMETICA")") {("*"|"/")(IDENTIFICADOR
|NUMERO|"("EXPRESSAOARITMETICA")")}}.

\end{verbatim}

\subsection{Número Completo}
\label{05:subsec:numerocompleto}

\begin{verbatim} 
NUMEROCOMPLETO=["-"]NUMERO["."NUMERO].

\end{verbatim}

\section{Lista de Transições}
\label{02:sec:transicoes}

Segue as transições de estados do autômato mínimo gerado a partir da análise da notação de Wirth da linguagem:
\subsection{Programa}
\label{01:subsec:programa}

\begin{verbatim} 
initial: 0
final: 12
(0, "int") -> 1
(0, "float") -> 2
(0, "char") -> 2
(0, "string") -> 2
(1, IDENTIFICADOR) -> 3
(1, "main") -> 4
(2, IDENTIFICADOR) -> 3
(3, "(") -> 8
(4, "(") -> 5
(5, ")") -> 6
(6, "{") -> 7
(7, COMANDO) -> 9
(8, "int") -> 10
(8, "float") -> 10
(8, "char") -> 10
(8, "string") -> 10
(8, ")") -> 11
(9, "}") -> 12
(10, IDENTIFICADOR) -> 15
(11, ";") -> 0
(12, "int") -> 13
(12, "float") -> 13
(12, "char") -> 13
(12, "string") -> 13
(13, IDENTIFICADOR) -> 14
(14, "(") -> 16
(15, ",") -> 17
(15, ")") -> 11
(16, "int") -> 18
(16, "float") -> 18
(16, "char") -> 18
(16, "string") -> 18
(16, ")") -> 6
(17, "int") -> 10
(17, "float") -> 10
(17, "char") -> 10
(17, "string") -> 10
(18, IDENTIFICADOR) -> 19
(19, ",") -> 20
(19, ")") -> 6
(20, "int") -> 18
(20, "float") -> 18
(20, "char") -> 18
(20, "string") -> 18
\end{verbatim}

\subsection{Comando}
\label{02:subsec:comando}

\begin{verbatim} 
initial: 0
final: 12, 20, 40
(0, "int") -> 1
(0, "float") -> 1
(0, "char") -> 1
(0, "string") -> 1
(0, IDENTIFICADOR) -> 2
(0, "while") -> 3
(0, "if") -> 4
(0, "read") -> 5
(0, "print") -> 6
(0, "return") -> 7
(1, IDENTIFICADOR) -> 8
(2, "=") -> 33
(3, "(") -> 49
(4, "(") -> 35
(5, "(") -> 31
(6, "(") -> 21
(7, IDENTIFICADOR) -> 9
(7, EXPRESSAOARITMETICA) -> 9
(7, """) -> 10
(7, "'") -> 11
(8, ";") -> 12
(8, "=") -> 13
(9, ";") -> 20
(10, """) -> 9
(10, QUALQUERCARACTERE) -> 10
(11, QUALQUERCARACTERE) -> 14
(12, "int") -> 1
(12, "float") -> 1
(12, "char") -> 1
(12, "string") -> 1
(12, IDENTIFICADOR) -> 2
(12, "while") -> 3
(12, "if") -> 4
(12, "read") -> 5
(12, "print") -> 6
(12, "return") -> 7
(13, IDENTIFICADOR) -> 15
(13, EXPRESSAOARITMETICA) -> 16
(13, """) -> 17
(13, "'") -> 18
(14, "'") -> 9
(15, "(") -> 22
(16, ";") -> 12
(17, """) -> 16
(17, QUALQUERCARACTERE) -> 17
(18, QUALQUERCARACTERE) -> 19
(19, "'") -> 16
(20, IDENTIFICADOR) -> 2
(20, "while") -> 3
(20, "if") -> 4
(20, "read") -> 5
(20, "print") -> 6
(20, "return") -> 7
(21, EXPRESSAOARITMETICA) -> 23
(21, """) -> 24
(21, "'") -> 25
(22, EXPRESSAOARITMETICA) -> 26
(22, """) -> 27
(22, "'") -> 28
(23, ")") -> 9
(24, """) -> 23
(24, QUALQUERCARACTERE) -> 24
(25, QUALQUERCARACTERE) -> 29
(26, ",") -> 22
(26, ")") -> 16
(27, """) -> 26
(27, QUALQUERCARACTERE) -> 27
(28, QUALQUERCARACTERE) -> 30
(29, "'") -> 23
(30, "'") -> 26
(31, IDENTIFICADOR) -> 32
(32, ",") -> 31
(32, ")") -> 9
(33, IDENTIFICADOR) -> 34
(33, EXPRESSAOARITMETICA) -> 9
(33, """) -> 10
(33, "'") -> 11
(34, "(") -> 43
(35, EXPRESSAOLOGICA) -> 36
(36, ")") -> 37
(37, "{") -> 38
(38, COMANDO) -> 39
(39, "}") -> 40
(40, IDENTIFICADOR) -> 2
(40, "while") -> 3
(40, "if") -> 4
(40, "else") -> 41
(40, "read") -> 5
(40, "print") -> 6
(40, "return") -> 7
(41, "{") -> 42
(42, COMANDO) -> 44
(43, EXPRESSAOARITMETICA) -> 45
(43, """) -> 46
(43, "'") -> 47
(44, "}") -> 20
(45, ",") -> 43
(45, ")") -> 9
(46, """) -> 45
(46, QUALQUERCARACTERE) -> 46
(47, QUALQUERCARACTERE) -> 48
(48, "'") -> 45
(49, EXPRESSAOLOGICA) -> 50
(50, ")") -> 41
\end{verbatim}

\subsection{Expressão Lógica}
\label{03:subsec:expressaologica}

\begin{verbatim} 
initial: 0
final: 6
(0, "!") -> 1
(0, EXPRESSAOARITMETICA) -> 2
(0, "(") -> 3
(1, EXPRESSAOARITMETICA) -> 2
(1, "(") -> 3
(2, ">") -> 5
(2, "<") -> 5
(2, ">=") -> 5
(2, "<=") -> 5
(2, "!=") -> 5
(2, "==") -> 5
(3, EXPRESSAOLOGICA) -> 4
(4, ")") -> 6
(5, EXPRESSAOARITMETICA) -> 6
(6, "||") -> 0
(6, "&&") -> 0
\end{verbatim}

\subsection{Expressão Aritmética}
\label{04:subsec:expressaoaritmetica}

\begin{verbatim} 
initial: 0
final: 1
(0, IDENTIFICADOR) -> 1
(0, NUMERO) -> 1
(0, "(") -> 2
(1, "*") -> 0
(1, "/") -> 0
(1, "+") -> 0
(1, "-") -> 0
(2, EXPRESSAOARITMETICA) -> 3
(3, ")") -> 1

\end{verbatim}

\subsection{Número Completo}
\label{05:subsec:numerocompleto}

\begin{verbatim} 
initial: 0
final: 2, 4
(0, "-") -> 1
(0, NUMERO) -> 2
(1, NUMERO) -> 2
(2, ".") -> 3
(3, NUMERO) -> 4

\end{verbatim}

\section{Lista de Autômatos}
\label{03:sec:automatos}

Segue os autômato mínimos gerado a partir da análise da notação de Wirth da linguagem:
\pagebreak 

\subsection{Programa}
\label{01:sec:programa}

\begin{figure}[h!]
	\center
	\includegraphics[scale=0.5]{images/programa.png}
	\label{img:cespeciais}
	\caption{Programa}
\end{figure}
\pagebreak 

\subsection{Comando}
\label{02:sec:comando}

\begin{figure}[h!]
	\center
	\includegraphics[scale=0.4]{images/comando.png}
	\label{img:cespeciais}
	\caption{Comando}
\end{figure}
\pagebreak 

\subsection{Expressão Lógica}
\label{03:sec:expressaologica}

\begin{figure}[h!]
	\center
	\includegraphics[scale=0.5]{images/expressaologica.png}
	\label{img:cespeciais}
	\caption{Expressão Lógica}
\end{figure}

\subsection{Expressão Aritmética}
\label{04:sec:expressaoaritmetica}

\begin{figure}[h!]
	\center
	\includegraphics[scale=0.5]{images/expressaoaritmetica.png}
	\label{img:cespeciais}
	\caption{Expressão Aritmética}
\end{figure}

\subsection{Número}
\label{05:sec:numero}

\begin{figure}[h!]
	\center
	\includegraphics[scale=0.5]{images/numero.png}
	\label{img:cespeciais}
	\caption{Número}
\end{figure}